package 多线程.线程池;

import java.util.concurrent.*;

//引用chatgpt的解释
//ThreadPoolExecutor是Java中用于管理线程池的类。它的构造方法有七个参数，它们的含义如下：
//corePoolSize：指定线程池中核心线程的数量。核心线程是一直存在的线程，即使它们处于空闲状态。当任务数量超过corePoolSize时，线程池会创建新的线程来处理任务。
//maximumPoolSize：指定线程池中最大线程的数量。当任务数量超过maximumPoolSize且阻塞队列已满时，线程池会创建新的线程来处理任务。但是当任务数量小于等于corePoolSize时，线程池不会创建新的线程。
//keepAliveTime：指定线程池中非核心线程的空闲时间。当非核心线程空闲时间超过keepAliveTime时，它们会被终止并从线程池中移除。
//unit：指定keepAliveTime参数的时间单位，可以是TimeUnit.SECONDS、TimeUnit.MILLISECONDS等。
//workQueue：指定用于存储等待执行的任务的阻塞队列。当任务数量超过corePoolSize时，新的任务会被添加到该队列中等待执行。
//threadFactory：指定创建新线程的工厂。可以自定义工厂来创建线程，例如设置线程的名称、优先级等。
//handler：指定当线程池和阻塞队列都已满时，新任务的处理方式。可以选择默认的处理方式，例如抛出异常或丢弃任务，也可以自定义处理方式。
//这些参数可以根据具体的需求来调整，以满足不同的线程池管理需求。
public class 如何创建线程池 {
    public static void main(String[] args) {
//        核心线程在忙,任务队列站满了就会创建临时线程
//        核心线程在忙,任务队列站满,临时线程也满了就会触发拒绝策略
        ExecutorService 线程池 = new ThreadPoolExecutor(3, 5, 8,
                TimeUnit.SECONDS, new ArrayBlockingQueue<>(8),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());
        Runnable 任务 = new 实现runnable接口();
        线程池.execute(任务);
        线程池.execute(任务);
        线程池.execute(任务);
        线程池.execute(任务);
        线程池.execute(任务);


//线程池.shutdown();
//线程池.shutdownNow();
    }
}
